home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / editor / frexxed / fpl / latexcompile.fpl < prev    next >
Text File  |  1995-07-18  |  5KB  |  150 lines

  1. // $VER: LaTeXCompile.FPL 1.2 (02.03.95) © Jesper Skov $
  2.  
  3.  
  4. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» LaTeX Preference Interface ««
  5. void export LaTeXPrefs()
  6. {
  7.   PromptInfo(-1,"LaTeX mode preferences",-1,-1,
  8.    "LaTeX_auto_save",
  9.    "LaTeX_compile_dir",
  10.    "LaTeX_style",
  11.    "LaTeX_port_name",
  12.    "LaTeX_log_restart"
  13.    );
  14. }
  15.  
  16. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» ShowDVI to front ««
  17. void export LaTeXShow()
  18. {
  19.   if (!FindPort("showdvi")){
  20.     Request("ShowDVI not running!", "LaTeX info", "Huh?");
  21.   } else {
  22.     ARexxSend("showdvi", "tofront");
  23.     ARexxSend("showdvi", "activate");
  24.   }
  25. }
  26.  
  27. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» LaTeXCompile() ««
  28. void export LaTeXCompile()
  29. {
  30.   string TeXname = joinstr(ReadInfo("LaTeX_compile_dir"),ReadInfo("file_name"));
  31.  
  32.   if (strcmp("tex",substr(TeXname,strlen(TeXname)-3,3))){ // Check that name ends with ".tex"
  33.     Request("The file name must have a .tex suffix!","LaTeX info","Blast!");
  34.     return(0);
  35.   }
  36.  
  37.   if (!FindPort(ReadInfo("LaTeX_port_name"))){
  38.     Request("Could not find LaTeX port!","LaTeX info","Huh?");
  39.   } else {
  40.     Save(TeXname);
  41.     ARexxSend(ReadInfo("LaTeX_port_name"), joinstr("compile ",ReadInfo("LaTeX_style")," ",TeXname));
  42.  
  43.     if (ReadInfo("LaTeX_auto_save")){        // Also update file to disk
  44.       Save();
  45.     }
  46.   }
  47. }
  48.  
  49.  
  50. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» LaTeXFail() ««
  51. void export LaTeXFail(string LogName)
  52. {
  53.   int texID = GetBufferID(joinstr(substr(LogName,0,strlen(LogName)-3),"tex"));
  54.  
  55.   WindowToFront();
  56.  
  57.   if (texID){                                // Only proceed if tex file was found
  58.     int logID = GetBufferID(LogName);
  59.  
  60.     if (!logID){
  61.       logID = New();
  62.     }
  63.  
  64.     logID = CurrentBuffer(logID);            // logID now previous
  65.     Load(joinstr(GetCompileDir(texID),LogName));
  66.     CurrentBuffer(logID);                     // Re-activate previously active buffer
  67.     LaTeXNextError(texID,1);                 // Search error from line 1
  68.   } else {
  69.     ReturnStatus("Could not find LaTeX buffer!?!");
  70.   }
  71. }
  72.  
  73.  
  74. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» LaTeXNextError() ««
  75. void export LaTeXNextError(int texID, int texLine)
  76. {
  77.   string texName = ReadInfo("file_name",texID);
  78.   string logName = joinstr(substr(texName,0,strlen(texName)-3),"log");
  79.   int logID = GetBufferID(logName);
  80.   int errLine = 0;
  81.  
  82.   if (logID){
  83.     CurrentBuffer(logID);
  84.  
  85.     if (ReadInfo("LaTeX_log_restart"))        // goto start of log file if
  86.       GotoLine(1);                            // this flag is set
  87.  
  88.     SearchSet("=f+","\nl.");
  89.     while(!Search("\nl.")){
  90.       CursorRight(3);
  91.       errLine = atoi(GetWord());
  92.       if (errLine > texLine){
  93.         SearchSet("=","\n!");
  94.         if (!Search("\n!")){                 // From this point texName is reused
  95.           CursorRight(2);                     // for speed reasons
  96.           texName = GetLine();
  97.           texName = substr(texName,0,strlen(texName)-1);
  98.         } else {
  99.           texName = "Error description not found!";
  100.         }
  101.  
  102.         CurrentBuffer(texID);
  103.         GotoLine(errLine);
  104.         ReturnStatus(texName);                 // Show error text
  105.         break;
  106.       }
  107.     }
  108.  
  109.     if (errLine <= texLine){                 // If no valid error line found
  110.       CurrentBuffer(texID);
  111.       ReturnStatus("No more errors found!");
  112.     }
  113.   } else {
  114.     ReturnStatus(joinstr("Log file \"",logName,"\" not loaded!"));
  115.   }
  116. }
  117.  
  118.  
  119.  
  120. string GetCompileDir(int texID)
  121. {
  122.   string dir = ReadInfo("LaTeX_compile_dir");
  123.   if (strlen(dir)==0)
  124.     dir = ReadInfo("file_path");
  125.   return(dir);
  126. }
  127.  
  128.  
  129. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Key bindings ««
  130. AssignKey("LaTeXCompile();",    "control c control c","latex_mode");
  131. AssignKey("LaTeXNextError(GetBufferID(),ReadInfo(\"line\",GetBufferID()));","control c '0x2a'","latex_mode");
  132.  
  133. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» LaTeX mode preferences ««
  134. ConstructInfo("latex_mode","","","LB","",0,1,0);
  135. ConstructInfo("LaTeX_auto_save","","","LBWH","",0,1,1);
  136. ConstructInfo("LaTeX_log_restart","","","LBWH","",0,1,1);
  137. ConstructInfo("LaTeX_compile_dir","","","LSWH","",0,0,"PrimeTeX:");
  138. ConstructInfo("LaTeX_port_name","","","LSWH","",0,0,"Start_TeX");
  139. ConstructInfo("LaTeX_style","","","LSWH","",0,0,"&latex");
  140.  
  141. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» LaTeX menu ««
  142. MenuAdd("t", "LaTeX");
  143.  MenuAdd("i", "Compile", "LaTeXCompile();");
  144.  MenuAdd("i", "ShowDVI", "LaTeXShow();");
  145.  MenuAdd("i", "---");
  146.  MenuAdd("i", "Next error", "LaTeXNextError(GetBufferID(),ReadInfo(\"line\",GetBufferID()));");
  147.  
  148. MenuAdd("s", "LaTeX...", "LaTeXPrefs();", "", 6,6,-1); // Add to PackageSettings
  149. MenuBuild();
  150.